<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      //add(1)(2)(3) = 6
      /* 
add(1)(2,3)(4,5,6) = 21
add(1,2)(3,4)(2,1) = 13


题意:在任意时刻传递任意个数参数都可以执行函数

思路:吧所有传递的参数组装进一个数组统一进行处理
     参数复用
*/

      // function add() {
      //   let arg = Array.from(arguments);
      //   //由于闭包的作用  在后续调用函数传参时也能使用arg数组
      //   let inner = function () {
      //     //吧后续接收到的函数都存到arg里
      //     arg.push(...arguments);

      //     //返回自身 让后续调用都有效果
      //     return inner;
      //   };
      //   //因为log是以字符串的方法输出的 所以修改字符串tostring方法
      //   inner.toString = function () {
      //     return arg.reduce((pre, cur) => {
      //       return pre + cur;
      //     });
      //   };
      //   return inner;
      // }

      // console.log(add(1, 4)(2, 5, 7)(3, 2).toString());

      //变式
      // function sum(arg) {
      //   return arg.reduce((pre, cur) => {
      //     return pre + cur;
      //   });
      // }

      // function add(sum) {
      //   let arg = Array.from(arguments);
      //   // arg = arg.shift();

      //   return function name() {
      //     if (arguments.length == 0) {
      //       arg.shift();
      //       return sum(arg);
      //     } else {
      //       arg.push(...arguments);
      //       return name;
      //     }
      //   };
      // }

      // console.log(add(sum)(2, 4, 5)(2, 3, 4)());

      //练习

      // function Ming() {
      //   return function run(value) {
      //     console.log(`小明在${value}`);
      //     return run;
      //   };
      // }

      // Ming()("跑步")("吃饭");

      // class Ming {
      //   constructor(name) {
      //     this.name = name;
      //   }
      //   sleep(value) {
      //     console.log(`小明在${value}`);
      //     return this;
      //   }
      // }

      // let xiaoming = new Ming("小明");

      // xiaoming.sleep("paobu").sleep("睡觉");
    </script>
  </body>
</html>
